package mystudy

import (
	"fmt"
	"os"
	_"path" // path只能处理一种路径\\
	_"path/filepath" // filepath 可以处理相对复杂的分隔符 提供了相对路径和绝对路径的处理方法
)
//打开文件函数
func OpenFile(filePath string) *os.File {
	fmt.Println("------打开文件------")
	var filePhth string = filePath
	// 打开文件：如果要以何种模式打开可以使用
	// file, err := os.OpenFile("data.txt", os.O_RDONLY, 0644)
	// os.O_RDONLY参数表示只读模式，0644是文件权限。如果文件打开成功，
	// 将输出"File opened successfully."，否则输出错误信息。
	file, err := os.Open(filePhth)
	if err !=nil{
		panic(err)
		return nil
	}
	return file
}
// 创建文件
func CreateFile(fileName string) *os.File {
	fmt.Println("------创建文件------")
	file, err :=os.Create(fileName)
	if err != nil {
		panic(fmt.Sprintf("创建文件失败: %s", err))
	}
	return file
}
// 读取文件
func ReadFile(file os.File){
	// 将指针移动到头部
	_, err := file.Seek(0, 0)
	buffer := make([]byte, 13)
	numBytes, err := file.Read(buffer)
	fmt.Println("读取文件大小：", numBytes, err)
	fmt.Printf("文件内容：%q\n", buffer[:])
}
// 写入文件内容
func WriteFile(file *os.File){
	fmt.Println("---写入文件内容---")
	data := []byte("hello, World!")
	numBytes, _ := file.Write(data) 
	fmt.Println(numBytes)
}
// 重命名文件
func RenameFile(oldName string, fileName string){
    err := os.Rename(oldName, fileName)
	fmt.Println("err:",  err)
}
// 获取文件信息
func GetFileInfo(fileName string){
	fileInfo, _ := os.Stat(fileName)
	fmt.Println("文件名：", fileInfo.Name())
	fmt.Println("文件大小", fileInfo.Size())
	fmt.Println("修改时间", fileInfo.ModTime())
}

func DemoFile01() {
	fmt.Println("------文件操作------")
	defer func(){
		if r:= recover();r != nil{
			fmt.Println("Panic:", r)
			return 
		}
	}()
	var filePath string = "D:\\07.go\\02.gostudy\\goproject\\src\\com\\gdzs\\main\\main.go"
	// 获取文件信息
	GetFileInfo(filePath)
	file := OpenFile(filePath)
	if file != nil{
		fmt.Println(file)
	}else{
		fmt.Println("打开文件失败")
	}
	// 创建文件
	createFile := CreateFile("gdzs.go")
	fmt.Println(createFile)
	// 写入数据
	WriteFile(createFile)
	// 读取文件
	ReadFile(*createFile)
	createFile.Close()
	RenameFile("gdzs.go", "gdzs.txt")

}